昨天我們成功在Python Shell新增Records並把這些Records抓出來顯示在網頁上,仔細觀察取得資料表紀錄的那行程式碼,就會發現我們並不是用SQL去撈資料而是用資料表物件(Model Object)自帶的方法去取得資料。
#昨天的程式碼
from django.http import HttpResponse
from django.template import loader
from .models import Members
def index(request):
  #取得Members資料表上所有的Records
  mymembers = Members.objects.all().values() #取得資料表紀錄
  output = ""
  for x in mymembers:
    output += x["firstname"]
  return HttpResponse(output)
那為什麼不是用SQL而是靠資料表物件(Model Object)去操作資料呢?
因為Django的資料庫操作靠的是ORM這個技術。

(圖片來源)
ORM是Object Relational Mapping的簡寫,中文翻譯是物件關聯對映,主要就是將資料庫的資料與物件(Object)相互對應,再實際一點的說法,就是把Django資料庫裡面的資料表(Model)以物件(Object)的型態召喚出來,接著就可以直接用這個物件做資料的CRUD,而不用寫SQL。
SQL語言轉換的困擾SQL Injection的問題SQL出現SQL Injection : 資料庫收到惡意使用者所輸入的 SQL 指令,在未驗證的情況下就逕自執行,導致惡意使用者可以取得最高權限,進而對資料庫造成未知破壞,其中包括竊取、修改、刪除資料等等。
ORM相對SQL是一個新的觀念,會需要花時間理解不同方法的意義SQL才能做到的事,用ORM會很難做到一樣的事,導致最後還是要寫SQL綜合ORM的優點與缺點,可以發現ORM雖然使用上很簡單,但還是有它的侷限性,所以還是要學點SQL會比較好解決複雜的問題。
今天沒有需要動手做的東西非常輕鬆,而明天依然會是
Django Models的番外篇,要來稍微補充說明前面看起來很謎的migrate和makemigrations等等。